A class loader loads classes used by an application at runtime. Given the name of a class, the class loader locates the definition of the class and loads it. For example, JAVA® has three default class loaders, the Bootstrap class loader, extensions class loader, and application class loader. Trademarks are the properties of their respective owners. The bootstrap class loader is responsible for loading the core Java libraries stored in a directory. The bootstrap class loader, which is part of the core JVM, is written in native code. The extensions class loader is responsible for loading the code in the extensions directories. Finally, the application class loader is responsible for loading code that is found in a predefined path (e.g., java.class.path system property). An administrator may place all the classes in a folder and then the classes may be loaded from the folder.
With conventional application class loaders, when the administrator wants to update classes, the administrator typically copies the updated class into the predefined path and overwrites the original class. Unfortunately, the original class is lost, and the administrator may not be able to determine which classes have been updated. A similar problem occurs when a server's profile has been changed. For example, a server's profile may be configured to different profiles (e.g., a production environment profile or testing environment profile), and different classes may be used for different profiles. Classes may be loaded into the server, and when the administrator wants to change the server's profile, the administrator typically copies classes that are used for the new profile into the predefined path and overwrites the original class in the predefined path. Again, the original class is lost, and the administrator may not be able to determine which classes have been updated.
It may be hard to maintain a system that loads classes found in a predefined path, especially if it is desirable to have different versions of a class in the predefined path or to change a server's profile.